iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Software Development

成為童年的英雄,Minecraft Java 模組製作系列 第 21

Minecraft Mod 模組製作 [DAY21] 方塊註冊

  • 分享至 

  • xImage
  •  

方塊註冊大神強力版

(以下程式碼位在[pokerfirstmod/block]的ModBlocks的class)

public class ModBlocks {
    public static final DeferredRegister<Block> BLOCKS =
            DeferredRegister.create(ForgeRegistries.BLOCKS, Mymod.MOD_ID);
 
    public static final RegistryObject<Block> SILVER_BLOCK = registerBlock("silver_block",
            ()-> new Block(BlockBehaviour.Properties.of(Material.METAL).
                    strength(6f).requiresCorrectToolForDrops()));
    
    private static <T extends Block> RegistryObject<T> registerBlock(String name, Supplier<T> block){
        RegistryObject<T> toReturn = BLOCKS.register(name,block);
        registerBlockItem(name,toReturn);
        return toReturn;
    }
    
    private static <T extends Block> RegistryObject<Item> registerBlockItem(String name,RegistryObject<T> block){
        return ModItems.ITEMS.register(name, ()-> new BlockItem(block.get(),
                new Item.Properties()));
    }
    
    public static void register(IEventBus eventBus){
        BLOCKS.register(eventBus);
    }
}

這是註冊方塊的程式碼
這個程式碼跟註冊物品的時候有甚麼不同呢?

我們上次講到(Marterial.METAL)的部分,接下來strength(6f)的部分代表方塊的硬度(玩家破壞的容易與否),requiresCorrectToolForDrops()代表這個方塊要求固定的工具來破壞,只有這樣他才會有掉落物。

註冊方塊的程式碼與註冊物品的程式碼多了兩個部分,這兩個來自 https://reurl.cc/o5rQqM ,這是這位大神在教學中使用的方法

會出現這兩個method是因為方塊在註冊的時候並不會自動註冊相應的物品,也就是說這個方塊只能以指令的方式生成,你甚至在創造模式中也找不到他,要註冊相應的物品要以BlockItem的方式呈現,這位大神將註冊Block跟BlockItem的過程串聯在一起,至於原理我請另一位大神ChatGPT來解釋

好我發現這部分比較困難,用到了泛型方法,我打算明天再講,我先放上丐版方塊註冊方法

丐版方法

public static final DeferredRegister<Block> BLOCKS =
            DeferredRegister.create(ForgeRegistries.BLOCKS, Mymod.MOD_ID);

public static final  RegistryObject<Block> SILVER_BLOCK = BLOCKS.register("silver_block"
            ,()-> new Block(BlockBehaviour.Properties.of(Material.METAL).strength(6f).requiresCorrectToolForDrops()));

public static final  RegistryObject<BlockItem> SILVER_BLOCKITEM = ITEMS.register("silver_block",()-> new BlockItem(SILVER_BLOCK.get(),new Item.Properties()));

這個就好理解多了,我們註冊方塊(Block)與方塊物品(BlockItem),BlockItem是Block的物品,我們使用SILVER_BLOCK.get()將方塊物品與方塊本身結合起來。

成果截圖

https://ithelp.ithome.com.tw/upload/images/20231007/20161797o2kwy6j7RA.png

我對這篇的內容不太滿意,之後會稍微修改


上一篇
Minecraft Mod 模組製作 [DAY20] 右鍵偵測 神奇桿桿(完) +測試影片
下一篇
Minecraft Mod 模組製作 [DAY22] 戰利品 掉落物 我要把獄髓錠的掉落率變300%
系列文
成為童年的英雄,Minecraft Java 模組製作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言